const logger = require('../utils/logger');

// 内存缓存实现
const memoryCache = new Map();

// 定期清理过期缓存
setInterval(() => {
  const now = Date.now();
  for (const [key, data] of memoryCache.entries()) {
    if (data.expireAt && data.expireAt < now) {
      memoryCache.delete(key);
      logger.debug(`缓存键 ${key} 已过期并删除`);
    }
  }
}, 60000); // 每分钟清理一次

// 设置缓存
async function set(key, value, expireTime = 3600) {
  try {
    memoryCache.set(key, {
      value,
      expireAt: Date.now() + expireTime * 1000
    });
    logger.debug(`缓存设置成功: ${key}`);
    return true;
  } catch (error) {
    logger.error('缓存设置失败:', error);
    return false;
  }
}

// 获取缓存
async function get(key) {
  try {
    const cached = memoryCache.get(key);
    if (!cached) {
      logger.debug(`缓存未命中: ${key}`);
      return null;
    }
    
    // 检查是否过期
    if (cached.expireAt && cached.expireAt < Date.now()) {
      memoryCache.delete(key);
      logger.debug(`缓存已过期: ${key}`);
      return null;
    }
    
    logger.debug(`缓存命中: ${key}`);
    return cached.value;
  } catch (error) {
    logger.error('缓存获取失败:', error);
    return null;
  }
}

// 删除缓存
async function del(key) {
  try {
    const result = memoryCache.delete(key);
    if (result) {
      logger.debug(`缓存删除成功: ${key}`);
    }
    return result;
  } catch (error) {
    logger.error('缓存删除失败:', error);
    return false;
  }
}

// 清空所有缓存
async function clear() {
  try {
    memoryCache.clear();
    logger.info('所有缓存已清空');
    return true;
  } catch (error) {
    logger.error('清空缓存失败:', error);
    return false;
  }
}

// 获取缓存统计信息
function getStats() {
  let totalSize = 0;
  let expiredCount = 0;
  const now = Date.now();
  
  for (const [key, data] of memoryCache.entries()) {
    if (data.expireAt && data.expireAt < now) {
      expiredCount++;
    }
    totalSize++;
  }
  
  return {
    totalKeys: totalSize,
    expiredKeys: expiredCount,
    activeKeys: totalSize - expiredCount
  };
}

module.exports = {
  set,
  get,
  del,
  clear,
  getStats
}; 